package xor

import C "gitee.com/ljfirst/algo-go-sdk/common/constant"

/**
 * @author ljfirst
 * @version V1.0
 * @date 2023/7/25 11:20
 * @author-Email ljfirst@mail.ustc.edu.cn
 * @blogURL https://blog.csdn.net/ljfirst
 * @description 找出数组中唯一出现一次的数
 * 在一组数中，每个数都出现了两次，但是出现了唯独一个数，仅出现一次，找出这个数
 **/
type FindNum_Twice_One struct {
}

func (m *FindNum_Twice_One) FindMethod(array []uint32) []uint32 {
	if len(array) < 2 {
		return nil
	}
	var ans uint32 = 0
	for _, v := range array {
		ans ^= v
	}
	return []uint32{ans}
}

func (m *FindNum_Twice_One) GetAttribute() *C.Attribute {
	return &C.Attribute{
		Tags: []string{C.Xor, C.Bit},
		Desc: &C.Desc{
			Name:        "FindNum_Twice_One",
			NameCn:      "找出数组中唯一个仅出现一次的数",
			Description: "在一组数中，每个数都出现了两次，但是出现了唯独一个数，仅出现一次，找出这个数",
			ParamsDesc: map[string]string{
			},
			Example: map[int]string{
				1: "数组 [1,1,2,2,3,3,5]中，5仅仅出现一次，其他数字出现2次",
			},
		},
	}
}
